#!/bin/bash

# AI Agent 后端快速启动脚本
# 适用于 MySQL 8.1+

set -e  # 遇到错误立即退出

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 打印带颜色的消息
print_info() {
    echo -e "${BLUE}ℹ️  $1${NC}"
}

print_success() {
    echo -e "${GREEN}✅ $1${NC}"
}

print_warning() {
    echo -e "${YELLOW}⚠️  $1${NC}"
}

print_error() {
    echo -e "${RED}❌ $1${NC}"
}

print_header() {
    echo ""
    echo -e "${BLUE}========================================${NC}"
    echo -e "${BLUE}$1${NC}"
    echo -e "${BLUE}========================================${NC}"
    echo ""
}

# 检查命令是否存在
check_command() {
    if ! command -v $1 &> /dev/null; then
        print_error "$1 未安装，请先安装 $1"
        exit 1
    fi
}

# 主函数
main() {
    print_header "🚀 AI Agent 后端快速启动"
    
    # 1. 检查依赖
    print_info "检查系统依赖..."
    check_command python3
    check_command pip3
    check_command mysql
    print_success "系统依赖检查完成"
    
    # 2. 检查 Python 版本
    print_info "检查 Python 版本..."
    python_version=$(python3 --version | cut -d' ' -f2)
    print_success "Python 版本: $python_version"
    
    # 3. 创建虚拟环境（如果不存在）
    if [ ! -d "venv" ]; then
        print_info "创建 Python 虚拟环境..."
        python3 -m venv venv
        print_success "虚拟环境创建完成"
    else
        print_warning "虚拟环境已存在，跳过创建"
    fi
    
    # 4. 激活虚拟环境
    print_info "激活虚拟环境..."
    source venv/bin/activate
    print_success "虚拟环境已激活"
    
    # 5. 安装依赖
    print_info "安装 Python 依赖包..."
    pip install --upgrade pip
    pip install -r requirements.txt
    print_success "依赖包安装完成"
    
    # 6. 检查 .env 文件
    if [ ! -f ".env" ]; then
        print_warning ".env 文件不存在"
        print_info "复制 env.example 为 .env..."
        cp env.example .env
        print_success ".env 文件创建完成"
        print_warning "请编辑 .env 文件，配置数据库连接信息"
        print_info "nano .env  # 或使用你喜欢的编辑器"
        echo ""
        read -p "配置完成后按回车继续..."
    else
        print_success ".env 文件已存在"
    fi
    
    # 7. 测试数据库连接
    print_info "测试数据库连接..."
    if python test_mysql_connection.py; then
        print_success "数据库连接测试通过"
    else
        print_error "数据库连接测试失败"
        print_warning "请检查以下配置："
        print_info "1. MySQL 服务是否运行"
        print_info "2. .env 文件中的数据库配置是否正确"
        print_info "3. 数据库用户是否使用 mysql_native_password 认证"
        echo ""
        print_info "详细配置指南请查看: MYSQL8_SETUP.md"
        exit 1
    fi
    
    # 8. 询问是否初始化数据库
    echo ""
    read -p "是否需要初始化数据库表？(y/n) " -n 1 -r
    echo ""
    if [[ $REPLY =~ ^[Yy]$ ]]; then
        print_info "初始化数据库表..."
        
        # 读取数据库配置
        source .env
        db_url=$DATABASE_URL
        
        # 解析数据库连接信息
        db_user=$(echo $db_url | sed -n 's/.*:\/\/\([^:]*\):.*/\1/p')
        db_pass=$(echo $db_url | sed -n 's/.*:\/\/[^:]*:\([^@]*\)@.*/\1/p')
        db_name=$(echo $db_url | sed -n 's/.*\/\([^?]*\).*/\1/p')
        
        print_info "数据库: $db_name"
        print_info "用户: $db_user"
        
        mysql -u "$db_user" -p"$db_pass" "$db_name" < init.sql
        print_success "数据库表初始化完成"
    else
        print_warning "跳过数据库初始化"
    fi
    
    # 9. 启动服务
    echo ""
    print_header "🎉 配置完成！"
    print_success "所有准备工作已完成"
    echo ""
    print_info "启动开发服务器..."
    print_info "访问地址: http://localhost:8000"
    print_info "API 文档: http://localhost:8000/docs"
    print_info "按 Ctrl+C 停止服务"
    echo ""
    
    # 启动 FastAPI 服务
    uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
}

# 错误处理
trap 'print_error "脚本执行失败"; exit 1' ERR

# 执行主函数
main

